home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src890906.arc / DRTEST.C < prev    next >
C/C++ Source or Header  |  1989-08-19  |  3KB  |  116 lines

  1. #define    BASE 0x380
  2. #define    CTL     (BASE+0)
  3. #define    DATA    (BASE+1)
  4.  
  5. #define    KEYUP    105    /* Keyup delay: 105 bytes = 15 ms */
  6. #define    TAIL    3    /* TX release delay */
  7.  
  8. char isat;
  9.  
  10. #include <stdio.h>
  11. #include <dos.h>
  12. #include "8530.h"
  13.  
  14. void send_buf __ARGS((char *buf,unsigned int n));
  15. void txon __ARGS((void));
  16. void txoff __ARGS((void));
  17.  
  18. #ifndef    foo
  19. char buf[7000] = "Testing de KA9Q, Warren, NJ, using 56kbps MSK modem by WA4DSY";
  20. #else
  21. char buf[7000];
  22. #endif
  23.  
  24. main()
  25. {
  26.     register int i;
  27.  
  28.     /* Reset and Initialize 8530 channel B */
  29.     write_scc(CTL,R9,FHWRES);
  30.     write_scc(CTL,R4,X1CLK|SDLC|SYNC_ENAB);
  31.     write_scc(CTL,R1,0); /* Disable interrupts */
  32.     write_scc(CTL,R3,Rx8|RxCRC_ENAB|RxENABLE);
  33.     write_scc(CTL,R5,DTR|Tx8|TxENAB|TxCRC_ENAB);
  34.     write_scc(CTL,R7,FLAG);
  35.     write_scc(CTL,R9,0);    /* Interrupt bits off */
  36.     write_scc(CTL,R10,CRCPS|NRZ);    /* NRZ mode */
  37.     write_scc(CTL,R11,RCTRxCP|TCRTxCP); /* RxCLK = TRxCLK, TxCLK = RTxCLK */
  38.     write_scc(CTL,R0,RES_EOM_L);    /* Clear end-of-message flag */
  39.  
  40.     txon();
  41.     for(i=0;i<7;i++)
  42.         send_buf(buf,sizeof(buf));
  43.     txoff();
  44.     return 0;
  45. }
  46. /* Transmit a buffer. The transmitter must already be on. */
  47. void
  48. send_buf(buf,n)
  49. register char *buf;
  50. register unsigned int n;
  51. {
  52.     write_scc(CTL,R0,RES_Tx_CRC);    /* Restart TX CRC calculation */
  53.  
  54.     /* Send data bytes */
  55.     outportb(DATA,*buf++);
  56.     n--;
  57.     write_scc(CTL,R0,RES_EOM_L);    /* Clear end-of-message flag */
  58.     while(n-- != 0){
  59.         while(!(read_scc(CTL,R0) & Tx_BUF_EMP))
  60.             ;
  61.         outportb(DATA,*buf++);
  62.     }
  63.     /* Wait for tx buffer empty to drop to indicate CRC going out */
  64.     while(read_scc(CTL,R0) & Tx_BUF_EMP)
  65.         ;
  66.     /* Now wait for the transmitter to become ready again,
  67.      * once CRC finishes
  68.      */
  69.     while(!(read_scc(CTL,R0) & Tx_BUF_EMP))
  70.         ;
  71. }
  72. /* Turn on transmitter and wait for keyup delay. This is done by
  73.  * starting a garbage frame, sending enough characters to allow
  74.  * for the delay, and then aborting it.
  75.  */
  76. void
  77. txon()
  78. {
  79.     register int i;
  80.  
  81.     /* Turn on transmitter */
  82.     write_scc(CTL,R5,DTR|Tx8|TxENAB|TxCRC_ENAB|RTS);
  83.  
  84.     /* Send dummy frame */
  85.     for(i=KEYUP;i != 0; i--){
  86.         while(!(read_scc(CTL,R0) & Tx_BUF_EMP))
  87.             ;
  88.         outportb(DATA,'\0');
  89.     }
  90.     /* Now abort it */
  91.     write_scc(CTL,R0,SEND_ABORT);
  92. }
  93. /* Turn off transmitter. First start a new dummy frame to allow the last
  94.  * data frame to get out, then abort it.
  95.  */
  96. void
  97. txoff()
  98. {
  99.     register int i;
  100.  
  101.     /* Wait in case a CRC is just going out */
  102.     while(!(read_scc(CTL,R0) & Tx_BUF_EMP))
  103.             ;
  104.     write_scc(CTL,R0,RES_Tx_CRC);    /* Restart TX CRC calculation */
  105.     write_scc(CTL,R0,RES_EOM_L);    /* Clear end-of-message flag */
  106.     /* Send dummy frame */
  107.     for(i=TAIL;i != 0; i--){
  108.         while(!(read_scc(CTL,R0) & Tx_BUF_EMP))
  109.             ;
  110.         outportb(DATA,'\0');
  111.     }
  112.     write_scc(CTL,R0,SEND_ABORT);            /* Abort frame */
  113.     write_scc(CTL,R5,DTR|Tx8|TxENAB|TxCRC_ENAB);    /* Drop carrier */
  114. }
  115.  
  116.